Two-dimensional graphics processing (“2-D graphics”) refers generally to the creation of an image from graphical models having two dimensions (x and y coordinates). A graphical model defines attributes of real or imaginary objects that are to be represented in a rendered image. Such attributes include, for example, shape and position of an object in a graphics scene.
Traditional systems and techniques scan convert graphics data, scanline-by-scanline into arrays of pixel data. Pixel data is typically represented as one or more bitmaps. Scan conversion is a process that determines exact pixel locations on a screen of the display device that correspond to the graphics data. Scan conversion is normally performed by an edge stepper engine. The edge stepper steps down along the edges of a primitive until a point on the edge of the primitive is reached at which the primitive intersects a scan line, and then steps across the span corresponding to the scan line to determine the point on the opposite side of the primitive at which the scan line intersects the primitive.
One disadvantage of the conventional approach to performing scan conversion is that it generates uncompressed bitmaps that are stored in graphic device memory for subsequent use as program data by any number of different applications whenever similar graphics data is to be rendered. In a low-resource computing environment, meaning a client computing device has limited memory and/or processing resources, the amount of memory reserved for program data is limited. Storing uncompressed bitmaps into memory (e.g., non-volatile secondary storage) prior to their use may require a potentially prohibitive amount of storage space in the low resource environment. For instance, a 1280×1024 pixel true color image with 8-bits of color data per pixel requires approximately 4 megabytes of memory for storage.
Another disadvantage of conventional approaches to performing scan conversion is that the typical approach does not take into consideration that processing intensive image operations often need to be performed on graphics data prior to its display. Such operations are performed in order and include, for example: (a) after the uncompressed pixel data has already been stored into secondary storage as scan converted memory, compressing uncompressed pixel data to free-up memory resources; (b) decompressing bitmaps prior to moving them into a frame buffer (e.g., video random access memory (RAM), which is graphics device memory); and, (c) determining whether certain ones of the pixels in the bitmap should be blended/anti-aliased, sub-sampled, and/or resized to insure accurate or desired reproduction of the bitmap onto a particular physical display device. Each of these operations is processing intensive, and relatively slow.
Making this situation more difficult is that graphics data are typically used over and over by same or different applications (e.g., to display similar images, repaint previously occluded areas, to present a different zoom level, and so on), causing such described processing and memory intensive operations to be performed over and over again. Repetitive performances of such operations rapidly deplete processing and/or memory resources in the low resource environment.
The following discussion addresses these and other limitations of conventional systems and techniques for low-resource environments to manage bitmapped graphic objects.